"""
判断程序
根据规则和爬虫结果，判断公司档次，并将数据，结果和理由导出到Excel文件

第一档：1000元，满足以下①②③④任一条
①上市/独角兽
②最高融资额≥1亿人民币
③B轮及以上融资且参保人数≥100人且专利/软著≥20
④上年度主营业务收入≥1亿（沟通后需业务确认）

第二档：500元，满足以下①②③④任一条
①A轮及以上且最高融资额≥1000万人民币
②A轮以上且参保人数≥50人
③A轮及以上且专利/软著数量≥50且近一年有招聘
④国高新且参保人数≥50人且专利/软著≥20
⑤上年度主营业务收入≥5000万（沟通后需业务确认）

1-②④，2-①⑤ 目前不用判断（2021-07-29）
"""

import pandas as pd

from config import tmp_path, out_path


def judge(row):

    # 第一档条件
    A_conditions = {
        "①上市/独角兽": row.是否上市 == "是" or row.是否独角兽 == "是",
        # "②最高融资额≥1亿人民币": row.最高融资额 == "1亿元人民币及以上",
        "③B轮及以上融资且参保人数≥100人且专利/软著≥20 ": row.B and (row.参保人数 >= 100) and (max(row.专利数量, row.软著数量) >= 20)
    }

    # 第二档条件
    B_conditions = {
        # "①A轮及以上且最高融资额≥1000万人民币": row.A and row.最高融资额 == "1000万元人民币及以上",
        "②A轮以上且参保人数≥50人": row.A以上 and row.参保人数 >= 50,
        "③A轮及以上且专利/软著数量≥50且近一年有招聘": row.A and (max(row.专利数量, row.软著数量) >= 50) and row.近一年是否有招聘 == "是",
        "④国高新且参保人数≥50人且专利/软著≥20": (row.是否国高新 == "是") and (row.参保人数 >= 50) and (max(row.专利数量, row.软著数量) >= 20),
    }

    # 判断档次
    for k, v in A_conditions.items():
        if v:
            print(f"{row.企业全称}\t{k}\t第一档 1000元")
            return "第一档", k
    for k, v in B_conditions.items():
        if v:
            print(f"{row.企业全称}\t{k}\t第二档 500元")
            return "第二档", k
    else:
        print(f"{row.企业全称} 不能确定，请继续检查融资额")
        return "待定", "无"


def judges(tmp_path, out_path):
    # 读取爬虫结果
    df = pd.read_csv(tmp_path)

    # 对每条记录进行判断
    res = [judge(row) for row in df.itertuples()]

    # 转置判断结果，分成奖励标准和理由两列
    res_columns = list(zip(*res))

    # 删除多余列
    del df['A']
    del df['A以上']
    del df['B']

    # 添加结果列
    df['奖励标准'] = res_columns[0]
    df['理由'] = res_columns[1]

    # 排序后输出
    df = df.sort_values('奖励标准', ascending=True)
    df.to_excel(out_path, index=False)


if __name__ == '__main__':
    judges(tmp_path, out_path)